import pandas as pd
import numpy as np
import datetime as dt
from datetime import datetime
import seaborn as sns
import matplotlib as cm
import matplotlib.pyplot as plt
import altair as alt
from vega_datasets import data
from math import log10
pd.set_option('display.max_columns', None)
import matplotlib.pyplot as plt
import plotly.express as px
import plotly.graph_objects as go
import warnings
warnings.filterwarnings("ignore")
from PIL import Image
datos = pd.read_csv("C:/Users/David Benavides/Documents/Visualización de datos/database.csv",sep=";")
datos.head()
| Record ID | Agency Code | Agency Name | Agency Type | City | State | Year | Month | Incident | Crime Type | Crime Solved | Victim Sex | Victim Age | Victim Race | Victim Ethnicity | Perpetrator Sex | Perpetrator Age | Perpetrator Race | Perpetrator Ethnicity | Relationship | Weapon | Victim Count | Perpetrator Count | Record Source | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | January | 1 | Murder or Manslaughter | Yes | Male | 14 | Native American/Alaska Native | Unknown | Male | 15 | Native American/Alaska Native | Unknown | Acquaintance | Blunt Object | 0 | 0 | FBI |
| 1 | 2 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | March | 1 | Murder or Manslaughter | Yes | Male | 43 | White | Unknown | Male | 42 | White | Unknown | Acquaintance | Strangulation | 0 | 0 | FBI |
| 2 | 3 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | March | 2 | Murder or Manslaughter | No | Female | 30 | Native American/Alaska Native | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Unknown | 0 | 0 | FBI |
| 3 | 4 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | April | 1 | Murder or Manslaughter | Yes | Male | 43 | White | Unknown | Male | 42 | White | Unknown | Acquaintance | Strangulation | 0 | 0 | FBI |
| 4 | 5 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | April | 2 | Murder or Manslaughter | No | Female | 30 | Native American/Alaska Native | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Unknown | 0 | 1 | FBI |
El Murder Accountability Project es la base de datos más completa de homicidios disponible actualmente en los Estados Unidos. Este conjunto de datos incluye asesinatos del Informe Suplementario de Homicidios del FBI desde 1976 hasta el presente y datos de la Ley de Libertad de Información sobre más de 22,000 homicidios que no fueron reportados al Departamento de Justicia. Este conjunto de datos incluye la edad, raza, sexo, origen étnico de las víctimas y los perpetradores, además de la relación entre la víctima y el perpetrador y el arma utilizada.
datos.dtypes
Record ID int64 Agency Code object Agency Name object Agency Type object City object State object Year int64 Month object Incident int64 Crime Type object Crime Solved object Victim Sex object Victim Age int64 Victim Race object Victim Ethnicity object Perpetrator Sex object Perpetrator Age object Perpetrator Race object Perpetrator Ethnicity object Relationship object Weapon object Victim Count int64 Perpetrator Count int64 Record Source object dtype: object
datos.shape
(638454, 24)
datos1=datos
datos1.index=datos1["Record ID"]
datos1.drop(['Record ID'], axis=1)
datos1.head()
| Record ID | Agency Code | Agency Name | Agency Type | City | State | Year | Month | Incident | Crime Type | Crime Solved | Victim Sex | Victim Age | Victim Race | Victim Ethnicity | Perpetrator Sex | Perpetrator Age | Perpetrator Race | Perpetrator Ethnicity | Relationship | Weapon | Victim Count | Perpetrator Count | Record Source | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Record ID | ||||||||||||||||||||||||
| 1 | 1 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | January | 1 | Murder or Manslaughter | Yes | Male | 14 | Native American/Alaska Native | Unknown | Male | 15 | Native American/Alaska Native | Unknown | Acquaintance | Blunt Object | 0 | 0 | FBI |
| 2 | 2 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | March | 1 | Murder or Manslaughter | Yes | Male | 43 | White | Unknown | Male | 42 | White | Unknown | Acquaintance | Strangulation | 0 | 0 | FBI |
| 3 | 3 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | March | 2 | Murder or Manslaughter | No | Female | 30 | Native American/Alaska Native | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Unknown | 0 | 0 | FBI |
| 4 | 4 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | April | 1 | Murder or Manslaughter | Yes | Male | 43 | White | Unknown | Male | 42 | White | Unknown | Acquaintance | Strangulation | 0 | 0 | FBI |
| 5 | 5 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | April | 2 | Murder or Manslaughter | No | Female | 30 | Native American/Alaska Native | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Unknown | 0 | 1 | FBI |
datos1.isnull().sum()
Record ID 0 Agency Code 0 Agency Name 0 Agency Type 0 City 0 State 0 Year 0 Month 0 Incident 0 Crime Type 0 Crime Solved 0 Victim Sex 0 Victim Age 0 Victim Race 0 Victim Ethnicity 0 Perpetrator Sex 0 Perpetrator Age 0 Perpetrator Race 0 Perpetrator Ethnicity 0 Relationship 0 Weapon 0 Victim Count 0 Perpetrator Count 0 Record Source 0 dtype: int64
datos1
| Record ID | Agency Code | Agency Name | Agency Type | City | State | Year | Month | Incident | Crime Type | Crime Solved | Victim Sex | Victim Age | Victim Race | Victim Ethnicity | Perpetrator Sex | Perpetrator Age | Perpetrator Race | Perpetrator Ethnicity | Relationship | Weapon | Victim Count | Perpetrator Count | Record Source | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Record ID | ||||||||||||||||||||||||
| 1 | 1 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | January | 1 | Murder or Manslaughter | Yes | Male | 14 | Native American/Alaska Native | Unknown | Male | 15 | Native American/Alaska Native | Unknown | Acquaintance | Blunt Object | 0 | 0 | FBI |
| 2 | 2 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | March | 1 | Murder or Manslaughter | Yes | Male | 43 | White | Unknown | Male | 42 | White | Unknown | Acquaintance | Strangulation | 0 | 0 | FBI |
| 3 | 3 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | March | 2 | Murder or Manslaughter | No | Female | 30 | Native American/Alaska Native | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Unknown | 0 | 0 | FBI |
| 4 | 4 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | April | 1 | Murder or Manslaughter | Yes | Male | 43 | White | Unknown | Male | 42 | White | Unknown | Acquaintance | Strangulation | 0 | 0 | FBI |
| 5 | 5 | AK00101 | Anchorage | Municipal Police | Anchorage | Alaska | 1980 | April | 2 | Murder or Manslaughter | No | Female | 30 | Native American/Alaska Native | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Unknown | 0 | 1 | FBI |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 638450 | 638450 | WY01500 | Park County | Sheriff | Park | Wyoming | 2014 | January | 1 | Murder or Manslaughter | No | Male | 30 | White | Hispanic | Unknown | 0 | Unknown | Unknown | Unknown | Handgun | 0 | 0 | FBI |
| 638451 | 638451 | WY01700 | Sheridan County | Sheriff | Sheridan | Wyoming | 2014 | June | 1 | Murder or Manslaughter | Yes | Male | 62 | White | Unknown | Male | 57 | White | Unknown | Acquaintance | Handgun | 0 | 0 | FBI |
| 638452 | 638452 | WY01701 | Sheridan | Municipal Police | Sheridan | Wyoming | 2014 | September | 1 | Murder or Manslaughter | Yes | Female | 0 | Asian/Pacific Islander | Unknown | Female | 22 | Asian/Pacific Islander | Unknown | Daughter | Suffocation | 0 | 0 | FBI |
| 638453 | 638453 | WY01800 | Sublette County | Sheriff | Sublette | Wyoming | 2014 | December | 1 | Murder or Manslaughter | Yes | Male | 55 | White | Not Hispanic | Male | 31 | White | Not Hispanic | Stranger | Knife | 0 | 1 | FBI |
| 638454 | 638454 | WY01902 | Rock Springs | Municipal Police | Sweetwater | Wyoming | 2014 | September | 1 | Murder or Manslaughter | Yes | Female | 0 | White | Not Hispanic | Female | 24 | White | Not Hispanic | Daughter | Blunt Object | 0 | 1 | FBI |
638454 rows × 24 columns
datos2=datos1[datos1.iloc[:,21]!=0] #Eliminación de las filas número de victimas ya que dice que son 0
datos2=datos2[datos2.iloc[:,22]!=0]
datos2.iloc[:,21].value_counts()
1 8899 2 1469 3 584 4 184 10 160 5 72 6 69 7 24 9 20 Name: Victim Count, dtype: int64
datos2.iloc[:,22].value_counts()
1 8045 2 2033 3 1068 4 165 5 74 6 30 9 24 7 19 8 12 10 11 Name: Perpetrator Count, dtype: int64
datos2=datos2[datos2.iloc[:,15]!=0]
datos2=datos2[datos2.iloc[:,15]!=1]
datos2=datos2[datos2.iloc[:,15]!=2]
datos2=datos2[datos2.iloc[:,15]!=3]
datos2=datos2[datos2.iloc[:,15]!=4]
datos2=datos2[datos2.iloc[:,15]!=5]
datos2=datos2[datos2.iloc[:,15]!=6]
datos2=datos2[datos2.iloc[:,15]!=7]
datos2=datos2[datos2.iloc[:,15]!=8]
datos2=datos2[datos2.iloc[:,15]!=9]
#Eliminación de la columna edad de los perpetradores debido a que tome la decisión de que ya que existe en
#el tipo de crimen la opcion de homicidio no culposo (si lo investigue y es involuntario es como cuando vas distraido
#conduciendo y matas a alguien, te culpan de eso) asi que considere que de 10 años para arriba esta abierta esa opción
#igual si quieres poner digamos de 7 para adelante solo es eliminar la linea que tiene el 8 y 9. Pero yo creo que esta
#bien asi porque en USA pues lastimosamente hay crimenes de niños con armas en casa y puede que jugando pues hay
#homicidio no voluntario por negligencia
datos2
| Record ID | Agency Code | Agency Name | Agency Type | City | State | Year | Month | Incident | Crime Type | Crime Solved | Victim Sex | Victim Age | Victim Race | Victim Ethnicity | Perpetrator Sex | Perpetrator Age | Perpetrator Race | Perpetrator Ethnicity | Relationship | Weapon | Victim Count | Perpetrator Count | Record Source | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Record ID | ||||||||||||||||||||||||
| 174 | 174 | AL00118 | Brighton | Municipal Police | Jefferson | Alabama | 1980 | December | 1 | Murder or Manslaughter | Yes | Male | 24 | Black | Unknown | Male | 22 | Black | Unknown | Acquaintance | Shotgun | 1 | 1 | FBI |
| 175 | 175 | AL00118 | Brighton | Municipal Police | Jefferson | Alabama | 1980 | December | 1 | Murder or Manslaughter | Yes | Male | 18 | Black | Unknown | Male | 22 | Black | Unknown | Acquaintance | Shotgun | 1 | 1 | FBI |
| 191 | 191 | AL00201 | Mobile | Municipal Police | Mobile | Alabama | 1980 | July | 3 | Murder or Manslaughter | Yes | Male | 50 | White | Not Hispanic | Male | 24 | White | Not Hispanic | Stranger | Knife | 1 | 1 | FBI |
| 224 | 224 | AL00201 | Mobile | Municipal Police | Mobile | Alabama | 1980 | July | 3 | Murder or Manslaughter | Yes | Male | 38 | White | Not Hispanic | Male | 24 | White | Not Hispanic | Stranger | Knife | 1 | 1 | FBI |
| 346 | 346 | AL01800 | Cleburne | Sheriff | Cleburne | Alabama | 1980 | January | 1 | Murder or Manslaughter | No | Male | 79 | White | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Handgun | 3 | 1 | FBI |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 638357 | 638357 | WIMPD00 | Milwaukee | Municipal Police | Milwaukee | Wisconsin | 2014 | December | 2 | Murder or Manslaughter | No | Male | 19 | Black | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Firearm | 1 | 1 | FBI |
| 638372 | 638372 | WV01000 | Fayette County | Sheriff | Fayette | West Virginia | 2014 | March | 1 | Murder or Manslaughter | Yes | Female | 1 | White | Unknown | Male | 27 | White | Unknown | Son | Unknown | 1 | 1 | FBI |
| 638374 | 638374 | WV01000 | Fayette County | Sheriff | Fayette | West Virginia | 2014 | March | 1 | Murder or Manslaughter | Yes | Male | 0 | White | Unknown | Male | 27 | White | Unknown | Son | Unknown | 1 | 1 | FBI |
| 638435 | 638435 | WVWSP55 | State Police: Welch | State Police | McDowell | West Virginia | 2014 | October | 1 | Murder or Manslaughter | Yes | Male | 50 | White | Unknown | Female | 35 | White | Unknown | Unknown | Firearm | 1 | 2 | FBI |
| 638436 | 638436 | WVWSP55 | State Police: Welch | State Police | McDowell | West Virginia | 2014 | October | 1 | Murder or Manslaughter | Yes | Male | 21 | White | Unknown | Female | 35 | White | Unknown | Unknown | Firearm | 1 | 2 | FBI |
11481 rows × 24 columns
#datos2.iloc[:,15]=pd.to_numeric(datos2.iloc[:,15])
datos2.iloc[:,15].value_counts()
Male 8359 Unknown 2658 Female 464 Name: Perpetrator Sex, dtype: int64
datos2.iloc[:,19].replace({"Girlfriend":"Boyfriend/Girlfriend","Boyfriend":"Boyfriend/Girlfriend"},inplace=True)
datos2.shape
(11481, 24)
datos2=datos2.iloc[:,1:24]
datos2=datos2[datos2['Victim Age']!=998]
datos2.columns
Index(['Agency Code', 'Agency Name', 'Agency Type', 'City', 'State', 'Year',
'Month', 'Incident', 'Crime Type', 'Crime Solved', 'Victim Sex',
'Victim Age', 'Victim Race', 'Victim Ethnicity', 'Perpetrator Sex',
'Perpetrator Age', 'Perpetrator Race', 'Perpetrator Ethnicity',
'Relationship', 'Weapon', 'Victim Count', 'Perpetrator Count',
'Record Source'],
dtype='object')
plt.figure(figsize=[20,30])
sns.catplot(data = datos2,
kind = "bar",
estimator = np.mean,
x = 'Victim Age',
y = 'Victim Race',
hue = 'Perpetrator Race',
col = 'Victim Sex',
palette = 'mako',
ci = None)
<seaborn.axisgrid.FacetGrid at 0x2694d4f5610>
<Figure size 1440x2160 with 0 Axes>
Los datos que se presentan en esta visualización son la edad promedio de las personas que fueron victima de homicidio entre los años 1980 y 2014 que estan en el eje horizontal o eje X, en el eje Y o eje vertical esta la variable raza de la victima que se divide en 5 categorias y por ultimo a traves de barras de colores esta la raza del perpetrador. Y por ultimo se separa en sexo en 3 diferentes gráficos.
Identificar relaciones entre las razas de los perpetradores, para identificar si existe algun tipo de relación visual, tambien poder observar si hay alguna distinción de género en los homicidios teniendo en cuenta lo anteiriormente descrito y a la vez que edad es promedio por sexo y raza.
La visualización no requiere de una interacción con los usuarios ya que son datos fijos que cumplen su proposito de expresar y comparar los promedios por sexo y raza.
La marca implementada en esta visualización es de barras ya que con ellas se expresa la cantidad promedio de las edades a traves de las mismas en cada categoria de la raza de la victima.
El canal implementado es el de color ya que con este mismo se pueden identificar las razas de los perpetradores en las barras de los promedios, con el fin de separarlos por la misma variable en cada una de sus categorias.
La posible mejora para esta visualización seria la de colocar etiquetas en cada barra de promedio con el fin de que el usuario puede identificar fácilmente las cantidades del promedio.
temp=pd.crosstab(datos2['Month'],datos2['Year']).T
temp=temp.reindex(columns=['January','February','March','April','May','June','July','August','September','October','November','December'])
temp=temp.iloc[25:35,]
temp
| Month | January | February | March | April | May | June | July | August | September | October | November | December |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Year | ||||||||||||
| 2005 | 143 | 133 | 117 | 120 | 155 | 135 | 128 | 131 | 114 | 104 | 136 | 136 |
| 2006 | 141 | 87 | 119 | 154 | 118 | 129 | 168 | 104 | 143 | 158 | 109 | 158 |
| 2007 | 145 | 101 | 109 | 151 | 140 | 146 | 134 | 125 | 142 | 108 | 105 | 157 |
| 2008 | 99 | 142 | 167 | 128 | 117 | 160 | 103 | 105 | 103 | 156 | 100 | 125 |
| 2009 | 112 | 117 | 127 | 144 | 126 | 146 | 165 | 147 | 149 | 108 | 144 | 121 |
| 2010 | 150 | 83 | 115 | 132 | 153 | 113 | 119 | 120 | 128 | 102 | 136 | 110 |
| 2011 | 145 | 104 | 133 | 141 | 139 | 126 | 130 | 108 | 140 | 118 | 112 | 131 |
| 2012 | 133 | 122 | 113 | 163 | 144 | 130 | 186 | 145 | 103 | 114 | 97 | 151 |
| 2013 | 112 | 126 | 122 | 129 | 137 | 137 | 152 | 122 | 117 | 137 | 147 | 113 |
| 2014 | 124 | 81 | 105 | 106 | 137 | 86 | 123 | 114 | 112 | 117 | 103 | 104 |
from math import pi
meses=list(temp)[0:]
N=len(meses)
maxnum = temp[meses].values.max()
maxnum
186
plt.figure(figsize=[15,25])
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]
ax = plt.subplot(111, polar=True)
ax.set_theta_offset(pi / 2)
ax.set_theta_direction(-1)
plt.xticks(angles[:-1], meses)
ax.set_rlabel_position(0)
plt.ylim(0,maxnum)
year=temp.index
for i in range(0,10,1):
values=[]
values=temp.iloc[i].values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=2, linestyle='solid', label=str(year[i]))
plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))
<matplotlib.legend.Legend at 0x2694e31fc10>
Los datos que el usuario puede encontrar en este gráfico son diferentes lineas que representan la cantidad de casos de homicidios de cada año entre los años 2005 y 2014, esta visualización circular tiene 12 ejes que representan los meses del año y la cuenta de homicidios de cada mes.
Identificar diferencias en cada uno de los años entre el 2005 y 2014, cada año al ser representado con una linea diferente tiene el objetivo de que a traves de los meses el usuario pueda observar la evolución de la cantidad y comparar asi cada mes de un año con el mismo mes de otro año.
El usuario no requiere interactuar con la visualización debido a que son datos que no son dificiles de identificar a simple vista y que a traves de los diferentes colores que hay ningun año se confunde fácilmente con otro.
La marca implementada es de lineas ya que con estas podemos ver el avance a traves del tiempo y como crece o decrece la cantidad de homicidios en cada año a traves de los meses.
El canal que se uso es el de color ya que con los colores implementados para cada año es posible distinguir un año del otro y asi observar su progreso.
La posible mejora podría ser el agregar etiquetas a los picos que alcanza cada linea en los ejes, con el fin de que para el usuario pueda observar las cantidades expresadas en los picos.
espacial=datos2[datos2['Year']>2004]
espacial['State'].value_counts()
California 274 Texas 252 Michigan 200 Louisiana 174 South Carolina 169 North Carolina 160 Ohio 151 Florida 147 Georgia 122 Tennessee 121 Pennsylvania 103 Virginia 98 Indiana 94 New York 92 Maryland 85 Missouri 84 Illinois 74 Washington 69 Arizona 62 Arkansas 60 Oklahoma 46 New Jersey 44 Kentucky 43 Colorado 41 Mississippi 40 Wisconsin 38 Nevada 34 Connecticut 31 New Mexico 30 Minnesota 29 Massachusetts 25 Kansas 20 West Virginia 15 Nebraska 15 Oregon 14 Delaware 13 Rhodes Island 11 Maine 9 Utah 9 District of Columbia 7 Montana 7 Iowa 6 Wyoming 5 Alabama 5 Idaho 4 Vermont 2 North Dakota 2 Name: State, dtype: int64
espacial['Abreviatura']=np.zeros(len(espacial))
for i in range(0,len(espacial),1):
if espacial['State'].iloc[i]=='Texas':
espacial['Abreviatura'].iloc[i]='TX'
if espacial['State'].iloc[i]=='California':
espacial['Abreviatura'].iloc[i]='CA'
if espacial['State'].iloc[i]=='Florida':
espacial['Abreviatura'].iloc[i]='FL'
if espacial['State'].iloc[i]=='North Carolina':
espacial['Abreviatura'].iloc[i]='NC'
if espacial['State'].iloc[i]=='New York':
espacial['Abreviatura'].iloc[i]='NY'
if espacial['State'].iloc[i]=='Georgia':
espacial['Abreviatura'].iloc[i]='GA'
if espacial['State'].iloc[i]=='Michigan':
espacial['Abreviatura'].iloc[i]='MI'
if espacial['State'].iloc[i]=='Missouri':
espacial['Abreviatura'].iloc[i]='MO'
if espacial['State'].iloc[i]=='Pennsylvania':
espacial['Abreviatura'].iloc[i]='PA'
if espacial['State'].iloc[i]=='Ohio':
espacial['Abreviatura'].iloc[i]='OH'
if espacial['State'].iloc[i]=='South Carolina':
espacial['Abreviatura'].iloc[i]='SC'
if espacial['State'].iloc[i]=='Virginia':
espacial['Abreviatura'].iloc[i]='VA'
if espacial['State'].iloc[i]=='Louisiana':
espacial['Abreviatura'].iloc[i]='LA'
if espacial['State'].iloc[i]=='Tennessee':
espacial['Abreviatura'].iloc[i]='TN'
if espacial['State'].iloc[i]=='Indiana':
espacial['Abreviatura'].iloc[i]='IN'
if espacial['State'].iloc[i]=='Arkansas':
espacial['Abreviatura'].iloc[i]='AR'
if espacial['State'].iloc[i]=='Colorado':
espacial['Abreviatura'].iloc[i]='CO'
if espacial['State'].iloc[i]=='Washington':
espacial['Abreviatura'].iloc[i]='WA'
if espacial['State'].iloc[i]=='Oklahoma':
espacial['Abreviatura'].iloc[i]='OK'
if espacial['State'].iloc[i]=='Illinois':
espacial['Abreviatura'].iloc[i]='IL'
if espacial['State'].iloc[i]=='Utah':
espacial['Abreviatura'].iloc[i]='UT'
if espacial['State'].iloc[i]=='Maryland':
espacial['Abreviatura'].iloc[i]='MD'
if espacial['State'].iloc[i]=='New Jersey':
espacial['Abreviatura'].iloc[i]='NJ'
if espacial['State'].iloc[i]=='Arizona':
espacial['Abreviatura'].iloc[i]='AZ'
if espacial['State'].iloc[i]=='Wisconsin':
espacial['Abreviatura'].iloc[i]='WI'
if espacial['State'].iloc[i]=='Mississippi':
espacial['Abreviatura'].iloc[i]='MS'
if espacial['State'].iloc[i]=='West Virginia':
espacial['Abreviatura'].iloc[i]='WV'
if espacial['State'].iloc[i]=='New Mexico':
espacial['Abreviatura'].iloc[i]='NM'
if espacial['State'].iloc[i]=='District of Columbia':
espacial['Abreviatura'].iloc[i]='DC'
if espacial['State'].iloc[i]=='Nevada':
espacial['Abreviatura'].iloc[i]='NV'
if espacial['State'].iloc[i]=='Maine':
espacial['Abreviatura'].iloc[i]='ME'
if espacial['State'].iloc[i]=='Iowa':
espacial['Abreviatura'].iloc[i]='IA'
if espacial['State'].iloc[i]=='Idaho':
espacial['Abreviatura'].iloc[i]='ID'
if espacial['State'].iloc[i]=='Montana':
espacial['Abreviatura'].iloc[i]='MT'
if espacial['State'].iloc[i]=='Kansas':
espacial['Abreviatura'].iloc[i]='KS'
if espacial['State'].iloc[i]=='Alaska':
espacial['Abreviatura'].iloc[i]='AK'
if espacial['State'].iloc[i]=='Kentucky':
espacial['Abreviatura'].iloc[i]='KY'
if espacial['State'].iloc[i]=='Massachusetts':
espacial['Abreviatura'].iloc[i]='MA'
if espacial['State'].iloc[i]=='Minnesota':
espacial['Abreviatura'].iloc[i]='MN'
if espacial['State'].iloc[i]=='Vermont':
espacial['Abreviatura'].iloc[i]='VT'
if espacial['State'].iloc[i]=='South Dakota':
espacial['Abreviatura'].iloc[i]='SD'
if espacial['State'].iloc[i]=='Oregon':
espacial['Abreviatura'].iloc[i]='OR'
if espacial['State'].iloc[i]=='Delaware':
espacial['Abreviatura'].iloc[i]='DE'
if espacial['State'].iloc[i]=='New Hampshire':
espacial['Abreviatura'].iloc[i]='NH'
if espacial['State'].iloc[i]=='Nebraska':
espacial['Abreviatura'].iloc[i]='NE'
if espacial['State'].iloc[i]=='Hawaii':
espacial['Abreviatura'].iloc[i]='HI'
if espacial['State'].iloc[i]=='Alabama':
espacial['Abreviatura'].iloc[i]='AL'
if espacial['State'].iloc[i]=='Connecticut':
espacial['Abreviatura'].iloc[i]='CT'
if espacial['State'].iloc[i]=='Connecticut':
espacial['Abreviatura'].iloc[i]='CT'
if espacial['State'].iloc[i]=='North Dakota':
espacial['Abreviatura'].iloc[i]='ND'
if espacial['State'].iloc[i]=='Rhodes Island':
espacial['Abreviatura'].iloc[i]='RI'
if espacial['State'].iloc[i]=='Rhodes Island':
espacial['Abreviatura'].iloc[i]='RI'
if espacial['State'].iloc[i]=='Wyoming':
espacial['Abreviatura'].iloc[i]='WY'
l=espacial['Abreviatura'].value_counts()
m=espacial['State'].value_counts()
fig = go.Figure(data=go.Choropleth(
locations=l.index,
z=l.values.astype(float),
locationmode='USA-states',
colorscale='YlGnBu',
autocolorscale=False,
marker_line_color='white',
colorbar_title="Cantidad de casos",
hovertext=m.index
))
fig.update_layout(
title_text='Número de casos de homicidios entre los años 2005 a 2014',
geo = dict(
scope='usa',
projection=go.layout.geo.Projection(type = 'albers usa'),
showlakes=True, # lakes
lakecolor='rgb(255, 255, 255)'),
)
fig.show()
from IPython.display import Image
Image("C:/Users/David Benavides/Documents/Visualización de datos/Vis Espacial David.png")
Los datos que se pueden observar en esta visualización es la cantidad de homicidios reportados entre los años 2005 y 2014, separado por estado y se usan los colores para poder identificar en que estados hubo más casos de homicidios.
Reconocer gráficamente en que estados hubo más homicidios entre los años 2005 a 2014 y usando la degradación de color poder identificar en que estados la cantidad de homicidios es mayor
La interacción que tiene el usuario con esta visualización es que al usar cursor para seleccionar algun estado que se quiera saber la cantidad de homicidios entonces aparecera una etiqueta con la cantidad de homicidios entre los años 2005 a 2014.
La marca de este canal es de posición ya que con ella podemos identificar los estados en el pais de Estados Unidos utilizando un mapa.
El canal implementado es el de color ya que con este el usuario identifica en que estado hubo más homicidios y en cuales no, usando la degradación del color.
La posible mejora para esta visualización es que de tener coordenadas más exactas para cada ciudad en la que se reporto el homicidio se podria hacer con circulos identificando en que partes más especificas del pais pasaron.
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib as plt
import matplotlib.pyplot as plt
import altair as alt
from vega_datasets import data
pd.set_option('display.max_columns', None) #Mostrar todas las columnas
sns.set(rc={'figure.figsize':(12.7,8.6)})
datos2.columns
Index(['Agency Code', 'Agency Name', 'Agency Type', 'City', 'State', 'Year',
'Month', 'Incident', 'Crime Type', 'Crime Solved', 'Victim Sex',
'Victim Age', 'Victim Race', 'Victim Ethnicity', 'Perpetrator Sex',
'Perpetrator Age', 'Perpetrator Race', 'Perpetrator Ethnicity',
'Relationship', 'Weapon', 'Victim Count', 'Perpetrator Count',
'Record Source'],
dtype='object')
datos2.head()
| Agency Code | Agency Name | Agency Type | City | State | Year | Month | Incident | Crime Type | Crime Solved | Victim Sex | Victim Age | Victim Race | Victim Ethnicity | Perpetrator Sex | Perpetrator Age | Perpetrator Race | Perpetrator Ethnicity | Relationship | Weapon | Victim Count | Perpetrator Count | Record Source | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Record ID | |||||||||||||||||||||||
| 174 | AL00118 | Brighton | Municipal Police | Jefferson | Alabama | 1980 | December | 1 | Murder or Manslaughter | Yes | Male | 24 | Black | Unknown | Male | 22 | Black | Unknown | Acquaintance | Shotgun | 1 | 1 | FBI |
| 175 | AL00118 | Brighton | Municipal Police | Jefferson | Alabama | 1980 | December | 1 | Murder or Manslaughter | Yes | Male | 18 | Black | Unknown | Male | 22 | Black | Unknown | Acquaintance | Shotgun | 1 | 1 | FBI |
| 191 | AL00201 | Mobile | Municipal Police | Mobile | Alabama | 1980 | July | 3 | Murder or Manslaughter | Yes | Male | 50 | White | Not Hispanic | Male | 24 | White | Not Hispanic | Stranger | Knife | 1 | 1 | FBI |
| 224 | AL00201 | Mobile | Municipal Police | Mobile | Alabama | 1980 | July | 3 | Murder or Manslaughter | Yes | Male | 38 | White | Not Hispanic | Male | 24 | White | Not Hispanic | Stranger | Knife | 1 | 1 | FBI |
| 346 | AL01800 | Cleburne | Sheriff | Cleburne | Alabama | 1980 | January | 1 | Murder or Manslaughter | No | Male | 79 | White | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Handgun | 3 | 1 | FBI |
datos2.iloc[:,19].replace({"Neighbor":"Acquaintance","Common-Law Wife":"Wife","Stepmother":"Mother","Stepfather":"Father","Boyfriend":"Boyfriend/Girlfriend","Girlfriend":"Boyfriend/Girlfriend","Sister":"Sister/Brother", "Brother":"Sister/Brother","Son":"Son/Daughter", "Daughter":"Son/Daughter","Stepson":"Son/Daughter"},inplace=True)
#datos2.iloc[:,20].replace({"Gun":"Firearm","Handgun":"Firearm","Rifle":"Firearm","Shotgun":"Firearm"},inplace=True)
tabla = pd.crosstab(datos2["Weapon"],datos2["Perpetrator Sex"])
tabla
| Perpetrator Sex | Female | Male | Unknown |
|---|---|---|---|
| Weapon | |||
| Blunt Object | 24 | 244 | 78 |
| Drowning | 0 | 4 | 4 |
| Drugs | 0 | 5 | 0 |
| Explosives | 3 | 179 | 4 |
| Fall | 0 | 2 | 0 |
| Fire | 63 | 234 | 140 |
| Firearm | 42 | 810 | 359 |
| Gun | 0 | 88 | 14 |
| Handgun | 194 | 4804 | 1530 |
| Knife | 58 | 594 | 203 |
| Poison | 2 | 4 | 0 |
| Rifle | 26 | 596 | 71 |
| Shotgun | 16 | 448 | 71 |
| Strangulation | 6 | 56 | 39 |
| Suffocation | 9 | 42 | 18 |
| Unknown | 21 | 235 | 120 |
ax = sns.heatmap(tabla,
annot=True,
fmt="d",
linewidths=0.10,
cmap="YlGnBu")
El gráfico de mapa de calor muestra el número de homicidas clasificado por la variable Sexo del perpetrador que tiene como categorias masculino, femenino y desconocido, la variable Arma que nos indica el arma con la que se cometio el homicidio y tiene como categorias: objeto son filo, asfixia, drogas, rifle, explosivos, caida, fuego, arma de fuego, cuchillo, veneno, estrangulación, ahogo, desconocido. El dataset es de tipo tabla con datos estaticos, ya que cuenta con atributos las cuales son variables categoricas e items que representan los registros por cada caso de homicidio.
Tipo de Dataset: Tabla
Tipos de datos:
items
Atributos cualitativos
La gráfica analiza y presenta, ya que el proposito de la gráfica es identificar que armas han sido las más utilizadas por los homicidas y a que genero pertenecen estos, pudiendose observar que las armas de fuego son las mas frecuentes tanto en hombres como en mujeres, seguido de cuchillos y fuego. Por otro lado tambien es fácil reconocer que la mayor cantidad de homicidas suelen ser hombres, aunque cabe aclarar que el género desconcido es bantante cuantiosa y podria albergar cierta cantidad de homicidas femeninas.
Por otro lado el gráfico además de identificar tambien compara pues al ser una tabla de conteos es facil hacer comparaciones entre las categorias que como ya se dijo anteriormente para este caso es el genero del homicida y el tipo de arma utilizada en el suceso. En los objetivos de la grafica podemos observar como atributo la correlación ya que la gráfica nos permite observar que caracterias se suelen presentar más junto con otras.
1. Actions
Analizar:
Especificas:
2. Objetivos
Se evidencia en la visualización que la información se codifica de forma alineada ya que es tipo tabla y la información esta presentada en el eje y y x de forma alineada y ordenada con respecto al sexo del perpetrador y el arma utilizada, de esta forma se tendrá mejores comparaciones visualmente.
Codificar
Organización: Alineada
Map: Color (saturación)
La marca implementada en esta gráfica son la lineas estas se observan como las divisiones de las categorias de las variables, además se tiene una linea vertical que nos inidica el grado de concentración de las variables.
El canal implementado es el de posición, color y tamaño ya que las lineas que separan los valores pertenecientes al cruce de las variables categoricas se presentan tanto vertical como horizontal, formando cuadros, mismos que mediante el canal de color nos dan a conocer el grado de concentración y para esto nos apoyamos en la barra vertical que nos indica que saturación de color representa mas o menos concentración o frecuencia.
La posible mejora para esta visualización seria la, mejorar la saturación del color, de forma que sea más fácil notar aquellos colores que son mas claros.
datos2.head()
| Agency Code | Agency Name | Agency Type | City | State | Year | Month | Incident | Crime Type | Crime Solved | Victim Sex | Victim Age | Victim Race | Victim Ethnicity | Perpetrator Sex | Perpetrator Age | Perpetrator Race | Perpetrator Ethnicity | Relationship | Weapon | Victim Count | Perpetrator Count | Record Source | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Record ID | |||||||||||||||||||||||
| 174 | AL00118 | Brighton | Municipal Police | Jefferson | Alabama | 1980 | December | 1 | Murder or Manslaughter | Yes | Male | 24 | Black | Unknown | Male | 22 | Black | Unknown | Acquaintance | Shotgun | 1 | 1 | FBI |
| 175 | AL00118 | Brighton | Municipal Police | Jefferson | Alabama | 1980 | December | 1 | Murder or Manslaughter | Yes | Male | 18 | Black | Unknown | Male | 22 | Black | Unknown | Acquaintance | Shotgun | 1 | 1 | FBI |
| 191 | AL00201 | Mobile | Municipal Police | Mobile | Alabama | 1980 | July | 3 | Murder or Manslaughter | Yes | Male | 50 | White | Not Hispanic | Male | 24 | White | Not Hispanic | Stranger | Knife | 1 | 1 | FBI |
| 224 | AL00201 | Mobile | Municipal Police | Mobile | Alabama | 1980 | July | 3 | Murder or Manslaughter | Yes | Male | 38 | White | Not Hispanic | Male | 24 | White | Not Hispanic | Stranger | Knife | 1 | 1 | FBI |
| 346 | AL01800 | Cleburne | Sheriff | Cleburne | Alabama | 1980 | January | 1 | Murder or Manslaughter | No | Male | 79 | White | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Handgun | 3 | 1 | FBI |
anios = ["2010","2011","2012"]
temporal2 = datos2[ (datos2['Year'].isin(anios)) & (datos2['Crime Solved'] == "Yes")]
temporal2.head()
| Agency Code | Agency Name | Agency Type | City | State | Year | Month | Incident | Crime Type | Crime Solved | Victim Sex | Victim Age | Victim Race | Victim Ethnicity | Perpetrator Sex | Perpetrator Age | Perpetrator Race | Perpetrator Ethnicity | Relationship | Weapon | Victim Count | Perpetrator Count | Record Source | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Record ID | |||||||||||||||||||||||
| 565031 | AR01801 | West Memphis | Municipal Police | Crittenden | Arkansas | 2010 | May | 2 | Murder or Manslaughter | Yes | Male | 38 | White | Unknown | Male | 45 | White | Unknown | Unknown | Rifle | 1 | 1 | FBI |
| 565033 | AR01801 | West Memphis | Municipal Police | Crittenden | Arkansas | 2010 | May | 2 | Murder or Manslaughter | Yes | Male | 39 | White | Unknown | Male | 45 | White | Unknown | Unknown | Rifle | 1 | 1 | FBI |
| 565061 | AR03500 | Jefferson | Sheriff | Jefferson | Arkansas | 2010 | January | 1 | Murder or Manslaughter | Yes | Female | 99 | Black | Unknown | Male | 18 | White | Unknown | Unknown | Blunt Object | 1 | 2 | FBI |
| 565062 | AR03500 | Jefferson | Sheriff | Jefferson | Arkansas | 2010 | January | 1 | Murder or Manslaughter | Yes | Male | 59 | White | Unknown | Male | 18 | White | Unknown | Unknown | Blunt Object | 1 | 2 | FBI |
| 565115 | AR06003 | North Little Rock | Municipal Police | Pulaski | Arkansas | 2010 | July | 1 | Murder or Manslaughter | Yes | Male | 29 | White | Unknown | Male | 16 | Black | Unknown | Unknown | Handgun | 1 | 2 | FBI |
Conteo_años_2 = pd.pivot_table(temporal2,
values='Victim Count',
index=['Year','Month'],
aggfunc=np.sum)
Conteo_años_2 = pd.DataFrame(Conteo_años_2)
Conteo_años_2.reset_index(inplace=True)
Conteo_años_2 = Conteo_años_2.rename(columns = {'index':'Year','Victim Count':'Valor'})
plt.rcParams['figure.figsize']=15,10
sns.lineplot(data=Conteo_años_2, x="Year", y="Valor", hue="Month",
hue_order = ['January','February','March','April','May',
'June','July','August','September','October','November','December'])
plt.ticklabel_format(style='plain', axis='y')
plt.legend(loc='upper left')
ax = plt.gca()
ax.yaxis.set_major_formatter('{x:1.0f}')
ax.xaxis.set_major_formatter('{x:1.0f}')
plt.show()
El gráfico de línea nos da a conocer mes a mes la variación del número de víctimas por asesinato de los años 2010, 2011 y 2012, para esto se utilizó la variable temporal año y mes, que indica la fecha del homicidio, y la variable número de víctimas, que nos indica el número de víctimas en el homicidio para el año y mes correspondiente. El datase es de tipo tabla con datos estáticos, ya que cuenta con atributos de las cuales 2 son variables temporales y 1 es variable cuantitativa, y cuenta con ítems que representan los registros por cada caso de homicidio.
Tipo de Dataset: Tabla
Tipos de datos:
items
Atributos:
La gráfica Descubre y presenta, ya que el propósito de la gráfica es mostrar y comparar como aumento o disminuyó el número de víctimas de homicidios mensualmente para los años 2010, 2011 y 2012, que como se observa el número de víctimas para junio estuvo aumentando para cada año y para 2011 y 2012 este mes fue el que más número víctimas de homicidio presento, por otro lado también se observa que los meses de marzo y abril para el año 2010 tienen mayor número de víctimas por homicidio y para el año siguiente (2011) este número disminuye considerablemente, sin embargo estos vuelven a subir para el año 2012 donde se catalogan en los meses con mayor cantidad de víctimas. estuvo entre 50 y 60 es uno de los meses.
En los objetivos del gráfico además de comparar también identifica y localiza pues las líneas de tiempo al interceptar la línea de años logra facilitar la identificación de datos atipicos, además el objetivo en los atributos es la similaridad o comparación de las tendencias de la variable número de víctimas a través del tiempo.
1. Actions
Analizar:
Especificas:
2. Objetivos
Se evidencia en la visualización que la información se codifica de forma ordenada ya que es tipo tabla y los atributos son temporales, la información esta presentada en el eje y y x de forma separada y ordenada con respecto al mes y al año respectivamente en cual se presentó el suceso, también se tiene que la faceta del gráfico es sobreponer, pues vemos que son varia líneas de tiempo que se sobreponen unas a otras en diferentes puntos.
Codificar
Organización: ordenada
Map: Color (Hue)
Facet
La marca implementada en esta gráfica son la líneas estas se observan como la líneas de tiempo cada una perteneciente a un mes de año, las cuales nos indican la variación del número de víctimas por homicidio a través del tiempo, también las vemos en la etiqueta como guía para encontrar el mes que le corresponde a cada línea de tiempo.
El canal implementado es el de posición, color y tamaño ya que las líneas de tiempo se presentan de forma horizontal y con un color diferente para cada una, al igual que la de las etiquetas que nos indican que color representa cada mes. Por otro lado, también tenemos el canal de posición vertical para la cantidad de víctimas y horizontal para la variable de tiempo año.
La posible mejora para esta visualización seria la cambiar el color de las marcas de las líneas, ya que no es tan fácil identificar el color para cada mes, debido a que los colores suelen ser muy parecidos, también dejar una única línea vertical para el año en cuestión.
El proceso se hizo en Colaboratory , pero se trae aqui en codigo para revisión, adjunto link de codigo. https://colab.research.google.com/drive/1Ri3_MRcQfxdRmmCaJ3bByxuCL7QvyUzC#scrollTo=OsV8bjmSbG8i
%matplotlib inline
import pandas as pd
#import geopandas as gpd
import matplotlib.pyplot as plt
import plotly.express as px
#from geopy.geocoders import Nominatim
import time
import math
## Crear un objeto nominatin
geo = Nominatim(user_agent="Homicidio")
## Valores unicos de los estados
Estados = pd.unique(crimenes['State'])
Estados
## Se saca la latitud y longitud de cada estado y se crea un dataframe con esto vectores
Longitud = []
Nombre_estados= []
Pais= []
for i in Estados:
loc = geo.geocode(i + ', United States')
Latitud.append(loc.latitude)
Longitud.append(loc.longitude)
Nombre_estados.append(i)
Pais.append(loc)
## Data frame
auxiliar= pd.DataFrame()
#"Nombre_estados","Pais","Latitud","Longitud"
auxiliar["State"]= Nombre_estados
auxiliar["Nombres_pais"]= Pais
auxiliar["latitud"]= Latitud
auxiliar["longitud"]= Longitud
#Se unen los dos dataframe por la columna "State"
crimenes=crimenes.merge (auxiliar, on = 'State', how = 'left')
crimenes.head()
# Se divide la base esocgiendo aquellos registros que pertenzecan a los años del 2010 al 2014 y
#que tengan los criemnes resueltos
anios = ["2010","2011","2012","2013","2014"]
crimenes2 = crimenes[ (crimenes['Year'].isin(anios)) & (crimenes['Crime Solved'] == "Yes")]
crimenes2.head()
## Se realiza el gráfico de mapa de burbujas
import plotly.graph_objects as go
px.set_mapbox_access_token("pk.eyJ1IjoibHV6cm9kcmlndWV6IiwiYSI6ImNrbm0yOXByazBteTkydnB1M2dtMnM2aXEifQ.5FGWOHOga_tW8dQGcFjDEw")
fig = px.scatter_mapbox(crimenes2,
lat='latitud',
lon='longitud',
hover_name='State',
zoom=4,
color="State",
size="Incident",
animation_frame="Year",
center = {"lat": 35.204888, "lon": -92.447911})
fig.update_layout(
title_text = 'Numero de incidentes de homicidio desde 2010 al 2014 en Estados Unidos',
showlegend = True,
geo = dict(
scope = 'north america',
landcolor = 'rgb(217, 217, 217)',
)
)
fig.show()
El gráfico mapa de burbujas nos da a conocer el número de incidentes de asesinato en los años del 2010 al 2014, para esto se utilizó la variable temporal año, que indica la fecha del homicidio, la variable numérica Incidentes, que nos indica el número de casos de homicidio que para los años ya mencionados, y finalmente la variable categórica Estado que nos da el nombre de cada estados donde se presentó el homicidio. El datase es de tipo geometría con datos estáticos, ya que cuenta con ítems que son todos los reportes de asesinatos y los datos de posición que los encontramos en la variable Estado.
Tipo de Dataset: Geometria
Tipos de datos:
Para este gráfico si se requiere transformación de los datos, ya que, para ubicar en el mapa, los estados en los que se cometen crímenes de asesinato, fue necesario incluir dos variables (Latitud y Longitud) las cuales derivaron de la variable State
Por otro lado, el gráfico de Descubre y presenta, ya que el propósito de la gráfica es mostrar en que estados hubo incidentes de homicidios y con que frecuencia, además nos muestra la variación de este desde el año 2010 al 2014, por lo tanto, se observa que para el 2011 el estado de florida y Nueva York son los que más presentan incidentes de homicidios, sin embargo, se ven casos en Texas, California, Michigan, entre otros. Así mismo para los 2011 y 2012 se tiene que Florida sigue siendo el estado con más homicidios, para el 2013 se observa un incremento de casos en el estado de Texas, pero no superando a florida, finalmente en el 2014 se tiene a florida como el que más homicidios reporta, seguido Texas, Oklahoma y de Louisiana.
Los objetivos del gráfico son identificar y localizar ya que el gráfico contiene burbujas que dan a conocer la ubicación es decir el estado, junto con el número de incidentes de homicidio, también podemos decir que otro objetivo es comparar pues se puede ver lo anterior para cada año (2010-2014).
1. Actions
Analizar:
Especificas:
2. Objetivos
Se evidencia en la visualización que la información codifica Uso ya que es de tipo geometria y tenemos posiciones, , también se tiene que codifica en mapa y que presenta color como matiz, tamaño y forma para las burbujas que identifican de los estados y la frecuencia de numero de homicidios.
Codificar
Organización: uso
Map:
Manipular
La marca implementada en esta visualización es de puntos ya que con estos se expresa la cantidad de homicidios y el estado en que ocurrio.
El canal implementado es el de color y tamaño ya que con estos se pueden identificar los Estados y la frecuencia de incidentes, esto con el fin de diferenciarlos en el mapa.
La posible mejora para esta visualización seria que los estados en el mapa tuvieran su propio color y mas bien utilizar las etiquetas para clasificar por raza o etnia del perpetrador.
datos2.Relationship.replace({"Stepson":"Stepdaughter","Unknown":"Stranger","Ex-Husband":"Ex-Wife","Stepfather":"Stepmother","Common-Law Husband":"Common-Law Wife",
"Son":"Daughter","Husband":"Wife","Friend":"Acquaintance","Boyfriend/Girlfriend":"Wife","Common-Law Wife":"Wife", "Brother":"Sister",
"Mother":"Father"},inplace=True)
datos2.Relationship.replace({"Stranger":"Desconocido/a","Acquaintance":"Conocido/a","Daughter":"Hijo/a","Wife":"Pareja","Father":"Mamá/Papá","Family":"Familia",
"Neighbor":"Vecino/a","Sister":"Hermano/a","In-Law":"Suegro/a","Stepdaughter":"Hijastro/a","Ex-Wife":"Ex-Pareja",
"Stepmother":"Padrastro/Madrastra","Employer":"Empleador","Employee":"Empleado","Common-Law Wife":"Pareja"},inplace=True)
sns.catplot(data = datos2,
kind = "bar",
estimator = np.mean,
x = "Victim Age",
y = "Relationship",
hue = "Victim Sex",
col = "Crime Solved",
palette = 'magma',
ci = None)
<seaborn.axisgrid.FacetGrid at 0x1697d752370>
import joypy
from matplotlib import pyplot as plt
from matplotlib import cm
datos2.Month.replace({"January":1,"February":2,"March":3,"April":4,"May":5,"June":6,
"July":7,"August":8,"September":9,"October":10,"November":11,"December":12},inplace=True)
datos2.Month.value_counts()
4 1113 1 1081 7 1058 6 938 8 930 9 929 12 919 10 919 5 914 3 904 11 878 2 877 Name: Month, dtype: int64
%matplotlib inline
labels=[y if y%10==0 else None for y in list(datos2.Year.unique())]
fig, axes = joypy.joyplot(datos2, by="Year", column="Victim Count", labels=labels, range_style='own',
grid="y", linewidth=1, legend=False, fade=True, figsize=(6,5),
title="Número de victimas y su crecimiento por años",
kind="counts", bins=30)
datos2["lat"] = datos2["State"]
datos2["lon"] = datos2["State"]
datos2.head()
| Agency Code | Agency Name | Agency Type | City | State | Year | Month | Incident | Crime Type | Crime Solved | Victim Sex | Victim Age | Victim Race | Victim Ethnicity | Perpetrator Sex | Perpetrator Age | Perpetrator Race | Perpetrator Ethnicity | Relationship | Weapon | Victim Count | Perpetrator Count | Record Source | lat | lon | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Record ID | |||||||||||||||||||||||||
| 174 | AL00118 | Brighton | Municipal Police | Jefferson | Alabama | 1980 | December | 1 | Murder or Manslaughter | Yes | Male | 24 | Black | Unknown | Male | 22 | Black | Unknown | Acquaintance | Shotgun | 1 | 1 | FBI | Alabama | Alabama |
| 175 | AL00118 | Brighton | Municipal Police | Jefferson | Alabama | 1980 | December | 1 | Murder or Manslaughter | Yes | Male | 18 | Black | Unknown | Male | 22 | Black | Unknown | Acquaintance | Shotgun | 1 | 1 | FBI | Alabama | Alabama |
| 191 | AL00201 | Mobile | Municipal Police | Mobile | Alabama | 1980 | July | 3 | Murder or Manslaughter | Yes | Male | 50 | White | Not Hispanic | Male | 24 | White | Not Hispanic | Stranger | Knife | 1 | 1 | FBI | Alabama | Alabama |
| 224 | AL00201 | Mobile | Municipal Police | Mobile | Alabama | 1980 | July | 3 | Murder or Manslaughter | Yes | Male | 38 | White | Not Hispanic | Male | 24 | White | Not Hispanic | Stranger | Knife | 1 | 1 | FBI | Alabama | Alabama |
| 346 | AL01800 | Cleburne | Sheriff | Cleburne | Alabama | 1980 | January | 1 | Murder or Manslaughter | No | Male | 79 | White | Unknown | Unknown | 0 | Unknown | Unknown | Unknown | Handgun | 3 | 1 | FBI | Alabama | Alabama |
datos2.lon.replace({"California" : -119.7512600,
"Texas" : -92.2890400,
"Florida" : -74.3568200,
"Michigan" : -98.1170500,
"North Carolina" : -80.84313,
"Pennsylvania" : -75.1637900,
"Ohio" : -83.0187900,
"Louisiana" : -91.0515300,
"Virginia" : -75.97799,
"New York" : -74.00597,
"Georgia" : -83.5001800,
"Arizona" : -112.07404,
"Missouri" : -90.19789,
"Tennessee" : -86.78444,
"Indiana" : -86.15804,
"South Carolina" : -79.9309200,
"Maryland" : -76.61219,
"Illinois" : -87.65005,
"New Jersey" : -74.07764,
"Washington" : -77.03637,
"Oklahoma" : -97.51643,
"Colorado" : -104.9847,
"Arkansas" : -92.28959,
"Kentucky" : -84.47772,
"Nevada" : -116.7511900,
"Wisconsin" : -89.40123,
"Massachusetts" : -71.05977,
"New Mexico" : -106.65114,
"Mississippi" : -89.52229,
"Connecticut" : -72.6850900,
"West Virginia" : -106.4823200,
"Kansas" : -94.57857,
"Minnesota" : -93.26384,
"Utah" : -111.89105,
"Oregon" : -122.67621,
"Iowa" : -91.53017,
"District of Columbia" : -77.03637,
"Alabama" : -95.712891,
"Idaho" : -112.03414,
"Montana" : -109.7510200,
"Alaska" : -107.7494800,
"Maine" : -95.712891,
"Delaware" : -75.4999200,
"Nebraska" : -95.8525000,
"Rhodes Island" : -71.4128300,
"Vermont" : -90.4279000,
"New Hampshire" : -71.4675700,
"South Dakota" : -96.7003300,
"North Dakota" : -96.7898000,
"Hawaii" : -157.8583300,
"Wyoming" : -107.5009000},inplace = True)
datos2.lat.replace({"California" : 37.2502200,
"Texas" : 35.3236900,
"Florida" : 41.3317600,
"Michigan" : 48.0250000,
"North Carolina" : 35.22709,
"Pennsylvania" : 39.9523300,
"Ohio" : 39.9961800,
"Louisiana" : 39.4489400,
"Virginia" : 36.85293,
"New York" : 40.71427,
"Georgia" : 32.7504200,
"Arizona" : 33.44838 ,
"Missouri" : 38.62727,
"Tennessee" : 36.16589,
"Indiana" : 39.76838,
"South Carolina" : 32.7765700,
"Maryland" : 37.09024,
"Illinois" : 41.85003 ,
"New Jersey" : 40.72816,
"Washington" : 38.89511 ,
"Oklahoma" : 35.46756,
"Colorado" : 39.73915 ,
"Arkansas" : 34.74648,
"Kentucky" : 37.98869,
"Nevada" : 39.2502100,
"Wisconsin" : 43.07305,
"Massachusetts" : 42.35843,
"New Mexico" : 35.08449,
"Mississippi" : 32.03349,
"Connecticut" : 41.7637100,
"West Virginia" : 31.7685700,
"Kansas" : 39.09973,
"Minnesota" : 44.97997,
"Utah" : 40.76078,
"Oregon" : 45.52345,
"Iowa" : 41.66113,
"District of Columbia" : 38.89511,
"Alabama" : 37.09024,
"Idaho" : 43.46658,
"Montana" : 47.0002500,
"Alaska" : 33.4320100,
"Maine" : 37.09024,
"Delaware" : 39.0003900,
"Nebraska" : 40.6702800,
"Rhodes Island" : 41.8239900,
"Vermont" : 40.2942100,
"New Hampshire" : 42.7653700,
"South Dakota" : 43.5499700,
"North Dakota" : 46.8771900,
"Hawaii" : 21.3069400,
"Wyoming" : 43.0002400},inplace=True)
px.set_mapbox_access_token("pk.eyJ1Ijoia2FyZW5yb2phcyIsImEiOiJja25tMmw3OWQwbXl6MnBvNTdjam5xdW9jIn0.GkuAPjGFBNUEvZcZ8_-uTw")
fig = px.scatter_mapbox(datos2,
lat="lat",
lon="lon",
hover_name="City",
color="Victim Count",
size="Victim Count",
animation_frame='Month',
color_continuous_scale=px.colors.sequential.Oranges,
zoom=3,title="Cantidad de victimas acumulados mes ")
fig.show()
from IPython.display import Image
Image("C:/Users/David Benavides/Documents/Visualización de datos/Vis_espacial_freddy.png")